package org.wyl.movie;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;

/**
 * 参考博客：https://blog.csdn.net/qq_39769369/article/details/82892385
 * 1、爬取（电影天堂）电影详情页链接
 * 2、再发起请求，爬取电影名字以及下载地址
 * 3、输出到控制台
 *
 * @author zhl
 */
public class MovieSpider implements PageProcessor {
    /**
     * 为防止该页面请请求失败
     * setRetryTimes(3)设置该页面请求次数
     * setSleepTime(3000)设置请求次数间隔时间
     */
    private static final Site site = Site.me().setTimeOut(3000).setRetryTimes(3).setSleepTime(1000);

    /**
     * 1、网络请求
     * 2、内容分析及抽取
     *
     * @param args
     */
    public static void main(String[] args) {
        //爬取的路径URL---1个线程去执行
//        Spider.create(new InfoByWebMagic()).addUrl("http://www.dytt8.net/index2.htm").thread(1).run();
        //或者--也是输出到控制台
        Spider.create(new MovieSpider()).addUrl("http://www.dytt8.net/index2.htm").addPipeline(new ConsolePipeline()).run();
    }

    /**
     * Site就是要分析那个页面 一般是拿当前页面
     */
    @Override
    public Site getSite() {
        return site;
    }

    /**
     * 内容分析逻辑
     * 工具：1、正则表达式
     * 2、cssStyle
     * 3、Jsoup
     * 4、Xpath
     */
    @Override
    public void process(Page page) {
        //写相应的xpath
        if ("http://www.dytt8.net/index2.htm".equals(page.getUrl().toString())) {
            //抽取结果
            String movieUlList = page.getHtml()
                    .css("#header > div > div.bd2 > div.bd3 > div:nth-child(2) > div.bd3rr > div:nth-child(2) > div.co_content4 > ul")
                    .get();
            Document document = Jsoup.parse(movieUlList);
            Elements elements = document.select("a");
            for (Element element : elements) {
                String movieLink = "https://www.dytt8.net/" + element.attr("href");
                //将找到的链接放到ddTargetRequest里面，会自动发起请求，不断递归
                page.addTargetRequest(movieLink);
            }
        } else {//第二次请求，电影详情页面
            page.putField("movieName", page.getHtml().xpath("//title/text()").toString());
            page.putField("downloadURL", page.getHtml().css("#Zoom > span > a").get());
        }
    }
}